home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / DebugTool_111.lha / srcvocab.c < prev   
C/C++ Source or Header  |  1992-10-31  |  2KB  |  114 lines

  1. #include "frobnitz.h"
  2.  
  3. /*******************************************************************/
  4. /*  Funktion: PrintVocab                                           */
  5. /*******************************************************************/
  6.  
  7. void
  8. PrintVocab (void)
  9. {
  10.   short int i, j, k;
  11.   int voc_length, number_words, word_bytes, word_letters;
  12.   byte interpunct_chars;
  13.   unsigned char buffer[15];
  14.   int twobytes;
  15.   byte is_end;
  16.  
  17.   printf ("DICTIONARY:\n\n");
  18.  
  19.   if (is_savefile)
  20.     {
  21.       error (8);
  22.       return;
  23.     }
  24.  
  25.   seek_pos (header.vocab_offset);
  26.  
  27. #ifdef DEBUG
  28.   printf ("<DI-BEG:$%04x>\n", ftell (DatFile));
  29. #endif
  30.  
  31.   printf ("%d interpunction chars:\n", (interpunct_chars = fgetc (DatFile)));
  32.   for (i = 0; i < interpunct_chars; i++)
  33.     {
  34.       if (!no_enum)
  35.     if (dec_enum)
  36.       printf ("%4d :  ", i + 1);
  37.     else
  38.       printf ("$%3x :  ", i + 1);
  39.       printf ("%c\n", fgetc (DatFile));
  40.     }
  41.  
  42.   switch (voc_length = fgetc (DatFile))
  43.     {
  44.     case 7:            /* v3 games */
  45.       word_bytes = 4;
  46.       break;
  47.     case 8:            /* Sherlock */
  48.     case 9:            /* v4-6 games */
  49.     case 10:            /* Arthur, Shogun */
  50.       word_bytes = 6;
  51.       break;
  52.     default:
  53.       quit (3);
  54.     }
  55.  
  56.   EncodedString[0] = (word_letters = (word_bytes / 2) * 3);
  57.  
  58.   number_words = (256 * fgetc (DatFile)) + fgetc (DatFile);
  59.  
  60.   printf ("%d words (length %d, %d flag bytes):", number_words, word_bytes, (voc_length - word_bytes));
  61.   newline ();
  62.  
  63.   for (i = 0; i < number_words; i++)
  64.     {
  65.       fread (buffer, 1, voc_length, DatFile);
  66.  
  67.       for (j = 0; j < word_bytes; j = j + 2)
  68.     {
  69.       k = ((j / 2) * 3) + 1;
  70.  
  71.       twobytes = (256 * buffer[j]) + buffer[j + 1];
  72.       is_end = (twobytes > 0x7fff);
  73.  
  74.       EncodedString[k] = (twobytes & 0x7c00) / 0x400;
  75.       EncodedString[k + 1] = (twobytes & 0x3e0) / 0x20;
  76.       EncodedString[k + 2] = (twobytes & 0x1f);
  77.     }
  78.       EncodedString[word_letters + 1] = '\0';
  79.  
  80.       if (!no_enum)
  81.     {
  82.       if (dec_enum)
  83.         printf ("%4d :  ", i + 1);
  84.       else
  85.         printf ("$%3x :  ", i + 1);
  86.     }
  87.       if (!(is_end))
  88.     printf ("[");
  89.  
  90.       StringDecode ();
  91.  
  92.       printf ("%s", DecodedString);
  93.  
  94.       if (!(is_end))
  95.     printf ("]");
  96.  
  97.       if (!no_attr)
  98.     {
  99.       if ((word_letters == 9) && (PrintedChars < 8))
  100.         printf ("\t");
  101.  
  102.       printf ("\t- ");
  103.  
  104.       for (j = word_bytes; j < voc_length; j++)
  105.         printf ("%02x ", buffer[j]);
  106.     }
  107.       newline ();
  108.     }
  109.  
  110. #ifdef DEBUG
  111.   printf ("<DI-END:$%04x>\n", ftell (DatFile));
  112. #endif
  113. }
  114.